// /pages/index/index.js
const app = getApp(); // 获取全局App实例

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 1. 动态数据模型：需要通过网络请求获取
    isLoading: true, // 控制页面加载状态
    bannerVM: [],    // 轮播图视图模型

    // 2. 静态数据模型：直接在本地定义，用于渲染固定的功能入口
    resourceGridVM: {
      title: '实验室资源预约',
      items: [
        {
          id: 1,
          name: '仪器预约',
          // 本地图标路径，请确保/images/icons/目录下有这张图片
          iconUrl: '/static/images/icons/instrument_booking.png', 
          path: '/pages/booking/booking',
          type: 'switchTab' // 跳转类型为 Tab 切换
        },
        // 未来若有新增的、固定的功能，可在此处继续添加
        // {
        //   id: 2,
        //   name: '功能二',
        //   iconUrl: '/images/icons/new_feature.png', 
        //   path: '/pages/feature2/feature2',
        //   type: 'navigateTo' // 跳转类型为页面跳转
        // }
        {
          id: 2,
          name: '仪器预约',
          // 本地图标路径，请确保/images/icons/目录下有这张图片
          iconUrl: '/static/images/icons/instrument_booking.png', 
          path: '/pages/booking/booking',
          type: 'switchTab' // 跳转类型为 Tab 切换
        },
        {
          id: 3,
          name: '仪器预约',
          // 本地图标路径，请确保/images/icons/目录下有这张图片
          iconUrl: '/static/images/icons/instrument_booking.png', 
          path: '/pages/booking/booking',
          type: 'switchTab' // 跳转类型为 Tab 切换
        },
        {
          id: 4,
          name: '仪器预约',
          // 本地图标路径，请确保/images/icons/目录下有这张图片
          iconUrl: '/static/images/icons/instrument_booking.png', 
          path: '/pages/booking/booking',
          type: 'switchTab' // 跳转类型为 Tab 切换
        }
      ]
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.initializePage();
  },

  /**
   * 页面初始化函数
   * 仅获取需要从后端加载的数据（轮播图）
   */
  async initializePage() {
    this.setData({ isLoading: true });
    try {
      // 1. 发起网络请求获取轮播图数据
      const bannerData = await this.fetchBanners();
      
      // 2. 将原始数据处理成视图模型
      const bannerVM = this.createBannerVM(bannerData);
      
      // 3. 更新页面数据
      this.setData({
        bannerVM: bannerVM,
      });

    } catch (error) {
      console.error("首页初始化失败", error);
    } finally {
      this.setData({ isLoading: false });
    }
  },

  /**
   * 网络请求: 获取轮播图数据
   * @returns {Promise<Array>}
   */
  fetchBanners() {
    return app.request({
      url: '/api/app/resources/banners' 
    });
  },
  
  /**
   * 数据处理: 创建轮播图视图模型 (VM)
   * @param {Array} rawData - 从后端获取的原始数据
   * @returns {Array}
   */
  createBannerVM(rawData) {
    if (!Array.isArray(rawData)) return [];
    const baseUrl = app.globalData.config.baseUrl;
    return rawData.map(item => ({
      id: item.id,
      // 拼接完整的图片 URL，用于展示
      imageUrl: baseUrl + item.image_path,
    }));
  },

  /**
   * 事件处理: 点击"预约指南"
   */
  async onGuideTap() {
    try {
      const guideContent = await app.request({
        // 【后端接口，请替换为您的实际地址】
        url: '/api/app/resources/content/guide'
        
      });
      wx.showModal({
        title: guideContent.title || '预约指南',
        content: guideContent.content || '暂无内容',
        showCancel: false,
        confirmText: '我已知晓'
      });
    } catch (error) {
      console.error("获取预约指南失败", error);
    }
  },

  /**
   * 事件处理: 点击"实验须知"
   */
  async onNoticeTap() {
    try {
      const noticeContent = await app.request({
        // 【后端接口，请替换为您的实际地址】
        url: '/api/app/resources/content/notice'
      });
      wx.showModal({
        title: noticeContent.title || '实验须知',
        content: noticeContent.content || '暂无内容',
        showCancel: false,
        confirmText: '我已知晓'
      });
    } catch (error) {
      console.error("获取实验须知失败", error);
    }
  },

  /**
   * 事件处理: 点击功能网格中的项目
   * 该函数处理的是本地定义的静态跳转逻辑
   */
  onResourceTap(e) {
    const item = e.currentTarget.dataset.item;
    
    // 检查路径是否存在
    if (!item || !item.path) {
      console.warn("点击的资源项没有配置跳转路径:", item);
      return;
    }

    // 根据本地定义的跳转类型 (type) 执行跳转
    if (item.type === 'switchTab') {
      wx.switchTab({ url: item.path });
    } else {
      wx.navigateTo({ url: item.path });
    }
  }
});